/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;


import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.EnviaEmail;
import org.cip.esymons.tesoreria.adapters.VerDeuda;
import org.cip.esymons.tesoreria.bc.EnvioMensajesDelegate;
import org.cip.esymons.tesoreria.bc.MensajesSolicitanteDelegate;
import org.cip.esymons.tesoreria.bc.MovimientoCuentaDelegate;
import org.cip.esymons.tesoreria.bc.MovimientoCuentaFacadeLocal;
import org.cip.esymons.tesoreria.be.EnumTipoDeuda;
import org.cip.esymons.tesoreria.be.EnvioMensajes;
import org.cip.esymons.tesoreria.be.MensajesSolicitante;

/**
 *
 * @author Ingrid Capuñay
 */
public class EnvioMensajesController {

    @EJB
    MovimientoCuentaFacadeLocal movimientoCuentaFacadeLocal;
    private EnvioMensajes envioMensajes;
    private EnvioMensajesDelegate delegadoEnvioMensajes;
    private MovimientoCuentaDelegate delegadoMovimientoCuenta;
    private MensajesSolicitanteDelegate delegadoMensajesSolicitante;

    public EnvioMensajesController() {
        delegadoEnvioMensajes = new EnvioMensajesDelegate();
        delegadoMovimientoCuenta = new MovimientoCuentaDelegate();
        delegadoMensajesSolicitante = new MensajesSolicitanteDelegate();
    }

    public String nuevoMensaje() {
        envioMensajes = new EnvioMensajes();
        return "nuevo";
    }

    public String grabarMensaje() {
        envioMensajes.setEnvFecha(new Date());
        delegadoEnvioMensajes.create(envioMensajes);
        List<Colegiado> lista = delegadoMovimientoCuenta.obtenerColegiadosConDeuda();
        if (lista.size() > 0) {
            for (Colegiado colegiado : lista) {
                StringBuilder sb = new StringBuilder();
                VerDeuda verDeuda;
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.CUOTA_CIP.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Cuotas:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");
                }
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.EVENTO.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Eventos:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");
                }
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.MULTA.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Multas:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");

                }
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.OTROS.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Otros:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");

                }
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.FRACCIONAMIENTO.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Fraccionamiento:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");

                }
                verDeuda = movimientoCuentaFacadeLocal.mostrarDeudaTotalCuotasSolicitante(colegiado.getSolCodigo(), EnumTipoDeuda.COLEGIATURA.ordinal(), new Date());
                if (verDeuda != null) {
                    sb.append("Por Colegiatura:").append(verDeuda.getDeudaTotal()).append(" entre el ").append(verDeuda.getFechaFormateadaInicio()).append(" y ").append(verDeuda.getFechaFormateadaFin()).append("<BR/>");
                }

                envioMensajes.getEnvMensaje().replace("$deuda", sb.toString());
                envioMensajes.getEnvMensaje().replace("$colegiado", colegiado.getPersonaNatural().getNombreCompletoPersona());
                envioMensajes.getEnvMensaje().replace("$cip", colegiado.getColnumeroCip());

                if (colegiado.getPersonaNatural().getSolcorreopersonal1() != null && !colegiado.getPersonaNatural().getSolcorreopersonal1().isEmpty()) {
                    EnviaEmail.envia("tesoreria@cip-trujillo.org", colegiado.getPersonaNatural().getSolcorreopersonal1(), envioMensajes.getTesAsunto(), envioMensajes.getEnvMensaje(), null);
                }
                if (colegiado.getPersonaNatural().getSolcorreocip() != null && !colegiado.getPersonaNatural().getSolcorreocip().isEmpty()) {
                    EnviaEmail.envia("tesoreria@cip-trujillo.org", colegiado.getPersonaNatural().getSolcorreocip(), envioMensajes.getTesAsunto(), envioMensajes.getEnvMensaje(), null);
                }
                MensajesSolicitante ms = new MensajesSolicitante();
                ms.setTmeFecha(new Date());
                ms.setEnvioMensajes(envioMensajes);
                ms.setSolicitante(colegiado.getPersonaNatural());
                delegadoMensajesSolicitante.create(ms);
            }
        }
        ControladorAbstracto.info("Se insertó satisfactoriamente el mensaje");
        return "buscar";
    }

    /**
     * @return the envioMensajes
     */
    public EnvioMensajes getEnvioMensajes() {
        return envioMensajes;
    }

    /**
     * @param envioMensajes the envioMensajes to set
     */
    public void setEnvioMensajes(EnvioMensajes envioMensajes) {
        this.envioMensajes = envioMensajes;
    }
}
